package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.PO.BuildInfoPO;
import com.itlong.cloud.POJO.VO.property.PropertyProjectBuildInfoVO;
import com.itlong.cloud.POJO.VO.property.PropertyProjectBuildSimpleInfoExVO;
import com.itlong.cloud.POJO.VO.property.PropertyProjectBuildSimpleInfoVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      楼栋信息数据访问接口
 * </desc>
 *
 * @createDate 2017-09-18.
 */
@Mapper
@Repository
public interface IPropertyBuildInfoDao extends IAbstractBaseDao<BuildInfoPO> {

    /**
     * <desc>
     *      保存楼栋信息
     * </desc>
     *
     * @param params 保存的参数
     * @return 受影响的行数
     * @author LewisLouis
     * @createDate 2017-09-20
     */
    Integer save(Map<String, Object> params);


    /**
     * <desc>
     *      批量保存楼栋信息（导入Excel时会使用）
     * </desc>
     *
     * @param params 待保存的楼栋信息列表
     * @return 受影响的行数
     * @author LouisLewis
     * @createDate 2017-10-12
     */
    Integer batchSave(List<Map<String, Object>> params);


    /**
     * <desc>
     *      修改楼栋信息【根据楼栋Id（BuildId）】
     * </desc>
     *
     * @param params 保存的参数
     * @return 受影响的行数
     * @author LewisLouis
     * @createDate 2017-09-26
     */
    Integer update(Map<String, Object> params);


    /**
     * <desc>
     *      批量更新楼栋信息（导入Excel时会使用）
     * </desc>
     *
     * @param params 待更新的楼栋信息列表
     * @return 受影响的行数
     * @author LouisLewis
     * @createDate 2017-10-13
     */
    Integer batchUpdate(List<Map<String, Object>> params);


    /**
     * <desc>
     *      逻辑删除楼栋信息【根据楼栋Id（BuildId）】
     * </desc>
     *
     * @param buildId 楼栋Id
     * @return sql执行行数
     * @author LewisLouis
     * @createDate 2017-09-26
     */
    Integer remove(@Param("buildId") String buildId);

    /**
     * <desc>
     *      获取指定项目下的楼栋编号(buildNum)列表
     * </desc>
     *
     * @param projectId 指定项目Id
     * @return 楼栋编号(buildNum)列表
     * @author LewisLouis
     * @createDate 2017-09-21
     */
    List<String> getBuildNumList(@Param("projectId") String projectId);


    /**
     * <desc>
     *      分页查询指定项目下的楼栋简单信息（楼栋id ,楼栋名称）列表
     * </desc>
     *
     * @param params 查询参数
     * @return 楼栋简单信息（楼栋id ,楼栋名称）列表
     * @author LewisLouis
     * @createDate 2017-09-28
     */
    List<PropertyProjectBuildSimpleInfoVO> getPageBuildSimpleInfoList(Map<String, Object> params);


    /**
     * <desc>
     *      分页查询指定项目下的楼栋简单扩展信息（楼栋id ,楼栋名称、楼栋下的房间数量）列表
     * </desc>
     *
     * @param params 查询参数
     * @return 楼栋简单扩展信息（楼栋id ,楼栋名称、楼栋下的房间数量）列表
     * @author LewisLouis
     * @createDate 2017-11-13
     */
    List<PropertyProjectBuildSimpleInfoExVO> getPageBuildSimpleInfoExList(Map<String, Object> params);
    /**
     * <desc>
     *      分页查询楼栋信息
     * </desc>
     *
     * @param params 查询参数
     * @return 分页数据集
     * @author LewisLouis
     * @createDate 2017-09-25
     */
    List<PropertyProjectBuildInfoVO> getPageList(Map<String, Object> params);

    /**
     * <desc>
     *      精确查询，获取单个楼栋信息
     * </desc>
     * @param buildInfoPO 查询楼栋信息数据传输对象
     * @return 按创建时间降序排列，首个符合查询条件的楼栋信息
     * @author LouisLewis
     * @createDate 2017-10-13
     */
    PropertyProjectBuildInfoVO getOneBuildInfo(BuildInfoPO buildInfoPO);

    /**
     * <desc>
     *      获取楼栋信息记录总数
     * </desc>
     *
     * @param params 查询参数
     * @return 记录总行数
     * @author LewisLouis
     * @createDate 2017-09-25
     */
    Integer getRecordCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取楼栋下电梯个数
     * </desc>
     *
     * @return 电梯个数
     * @author wangzhi
     * @createDate 2020/05/09
     */
    Integer getBuildElevatorCount(@Param("buildId") String buildId);
}
